perm filename TODO[RDG,DBL] blob
sn#628605 filedate 1981-12-03 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00017 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 To do in Rationale
C00005 00003 To do for FIELDs
C00006 00004 Things yet to be done to RLL:
C00020 00005 Example of SPEC
C00022 00006 Possible Problems
C00023 00007 Quickies:
C00027 00008 Units to Rename/Add/Delete
C00028 00009 Fixes to UTIL, DAVE, RLL, AUX
C00029 00010 Fixes to CORLL
C00033 00011 Fixes to XUTIL(M)
C00034 00012 General LISP questions
C00037 00013 Fixes to Documents
C00038 00014 Possible incompatibilities of Rand-Ai / SCORE / ISIB versions
C00050 00015 Comments on Code
C00053 00016 [12 Oct]
C00060 00017 (Older changes done already - until 10 Sept 80)
C00085 ENDMK
C⊗;
To do in Rationale
2) Class of people - subset of users?
3) Class of projects - each with affilited users ↑
4) New type - date; subtype of stringtype
5) Work on dialog with Entry. Must do this with Keith
PutValue on Descriptions, or SYNTAX -- should CONS together the various things.
(0) Fix ToEntry to insert the sender - Retrieval -- similarly FromEntry.
[fix Record]
(1) Add additional arg to WhenRetrievingG(P)
- which is the testing predicate.
eg EQ-PROP will pass EQUAL (EQ if (FSingleton (AtomType X));
while MEMB-PROP will chose among MEMB, MEMBER and SUBSTRING (?).
- started this, but need to think more about this.
(2) OrderTerms should simply determine which to do first, and extract that.
This decision can be based on several things --
eg use any Gen now present, else try to find some EQ-PROP whose
prop is invertable.
(3) Add on HowToPrint to each property.
-- Read thru <CORE>LEGAL.VALUES to find new things to add in -- such
as ARGUMENT, or new "slots" - from Bill's contribution.
To do for FIELDs
1. DefaultCachField should PutValue, not UA-PUTPROP!
2. Type of inheritance should be ISubUnit, and parents the list
(unit, slot).
3.
Things yet to be done to RLL:
updated [23 June 1981] [8 May 1980], [6 Apr 1980], started [8 Feb 1980]
1) Change DefaultAfterPutValue -- to consider recording changes to any of the
nucleus units (those of RLL, SLOTS, ...) -- only if NOT caching value.
[That external file can be used by other users to perform updates
to their copies of the RLL system.]
2) Get SPECS to work -- this should be like the UNITs package relation.
Already in place: AnySpecializableSlot -- need "modes",
and range-type specification which accepts both 5 and (*IntRange 3 7)
for values (possibly only if "non-terminal")
- must indicate individuals versus those "generic individuals" for simulation
to be complete
<<<### See Next Page ###>>>
3) MACROs still need to be implemented
[-- use DBL's code to understand those RESETVARS things..]
4) Figure out how to indicate some skeletal organization
of some function, which can then get fleshed out by filling in those
values (..outline..) This was used, weakly, in EURISKO stuff.
- Is this how to handle Templates? - perhaps as descriptors, ala SPILL agendae
- so can determine new task by fleshing out such descriptor.
only here will it call that function [in FindDefault] }
- note one may want to override such specification, and
insist that such a specification be easy to perform. (eg for an analogy)
- examples:
Extended notion of Caching --
[ie storing a value rather than recomputing it each time.]
( Slots are but one example.)
General spec for function:
Look it up
If found: Return that value
If not found: Compute it
Store it
Return that value
Examples: FunctionSpec
(note it should be calculated by combining Defn, ... if ~∃ HighLevelDefn)
Slots for IExamples((AnyDog))
? Descriptors?
Another instance: Many tasks have
Preliminary work -- eg type checking, authorization validation, ...
Actual chore
Post work -- eg ramifications
5) Fix slots of AllExamples[AnyFormat] do the right thing.
a) [Here: FnForDeleting, FnForSubstituting, FnForAdding,
FnForVerifyingAll, FnForKilling]
- They are (I think) correct for FSet, FSingleton, FBag, FList
and and other SlotFormats
but not at all for those in AnyValueFormat.
Also, many of these are inconsistent
eg: FExecute - capable of using uUNIT and uSLOT, bound by FindDefault.
Will this get in trouble - ie with recursion?
An answer: Use a new why, with (ValueFor unit slot)
b) What goes in FormatCharacter?
Should these be the names of units? how should they be used, for
things like format coersion -- and by whom (themselves?)
c) Just what are FOneOf and FExecute? What do they do?
What should they do?
d) Note Every orderedset is a set, every set is a bag, every bag is a list.
Furthermore, ∃ easy conversion from singleton to orderedset.
Can this ordering be used to advantage?
How does FListN fit into this?
<<Needed for FormatCoercion to work correctly.>>
6) More generally -- need to figure out what sort of stuff to store in the
various Characterization slots (eg FunctionCharacter as well)
7) What does go on the 4th element of FunctionSpec?
Some collection of characterization units? (see above)
Predicate calculus specification?
The "semantics" (pragmatics) of this unit?
8) Many processes are now just lisp functions. Unit-ize them.
EG: Unit creation is a unit list process - make it so. Give it a defn, whose
rangetype is WhoCares!
Using ApplyToEach ?
- Should include: DomainType & RangeType specifications, at the very least.
This will help in the development of various things, like
- OptimizeCode
Letting each function have a slot which indicates
how to improve it -- eg each of PROG1, PROGN, AND, OR should
all just return their respective arg, if there is only 1.
Similarly LENGTH could suggest looking for embedded APPENDs, etc.
- Macros - where each function could house who uses it.
9) Ah yes, Macros:
Spse the function FOO calls (GetValue fred 'Slot7).
As the GetValue macro is expanded, the value
(Slot7 FOO) is added onto the value of ToGetValue:ValueUsedInMacro.
Now information of ToGetValue:ToPutValue will check each time
a unit, X, gets a new ToGetValue -- if X appears on TGV:VUIM
(ie an ASSOC is performed), every value there is "Invalidate"d
for ValueUsedInMacro reasons -- ie the interpretered form is read in.
What more need I say?
(actually that (Slot7 FOO FIE ...) be an entry on TGV:VUIM)
10) Production Rules - their formalism, and the like, needs to be resolved.
Figure out more stuff for rules - eg store # of times tried, and success.
More heuristics... (eg AnyUnitCreationRule)
11) More work with HighLevelDefn
- so if F ≡ (SC f1 f2), then we can determine the HighLevelDefn of f1, if necessary
- write CommonHLDefn -- HighLevelDefn should be sufficient to define a slot!
- slot Combiners take 4-arguments [check these 10/ix/81]
First is list of slots,
Second is specifications -- eg TransitiveClosureCircular, Ordered, ...
Third is list of argnames
Fourth is Code? - this can be purged -- merged in with argnames..
- FnForUpdating is now defined from the HighLevelDefn.
Make FnForInverting and FnForCaching be as well.
[Remember to also check general Functionals]
11.5) Types of TransitiveSCFormer:
+-IncludeSelf, +-WellFounded, +-StrictHierarchy, +-PreserveOrder
12) Consider other ways to store values:
a) ToCache of AllTypicalExamples - (*Do* SeeU&S +++ AllExamples)
on all units y s.t. y.Isa = (AnyX) [note must be a singleton.]
b) Caching - by storing AllIsas on AnyX, and putting (FSeeU&S AnyX SuperClass*),
13) Units for special values - such as NoEntries, or RecomputeMe?
Maybe for all global variables? (these (↑) are just "constants")
14) More general I/O-Type, which subsumes DomainType and RangeType.
Need way to bind something in DomainType and use that value in
RangeType.
Specify a function's range in terms of its inputs - see ala
system used in ApplyToEach! It seems to work
Use this hack in ComposingSCFormer (for [Ordered]Composition) and
ApplyingSCFormer (for Apply[*]ingFn). Also to IsOk, IDENTITY, and who knows
what other LISPfns.
Note that ApplyToEach is just like Apply*ingFn - only it takes a few more args
-- and the first arg is now a mapping fn (perhaps this should be included
in DomainType of ApplyToEach?) Another difference: only the 2nd arg is
applied to the unit -- not all of them, as with Apply*ingFn.
Related: need GrammarType (or FGrammar?) - which takes set of production
rules, whose "terminals" are "simple" specifications...
15) [HARD] General constraint mechanism -- to state what types of things are
needed for RLL to work (Garden of Eden),
to use to reason about redundant values, ...
Another example: If R and S are inverses, then S:DomainType should help
determine R:RangeType, and vice versa.
16) Use of general (quantifier) variables, to handle various complex relations.
17) Have better description of parameters now on <user>:When___ingNetwork --
perhaps have canned values, which are mapped along; and which are
used during queries...
18) Slots whose values are computed for SideEffect only -- eg so the inverse
pointer is created. - note FunctionSpec is one of these; making
it unnecessary to do those obnoxious CacheValues, maybe.
Consider using something like PseudoInverse here -- note this is a subcase
of more general "push when filled" algorithm.
Note that a side effect of storing (U S) on SofU:LivesInLocation
means (PointAt SofU) should be the value of U:S.
<<Side note: (i) Should be MyLivesInLocation, ...
(ii) Current single-value/list-of-values is NOT sufficient:
at least when FListN used! -- many changes to
UpdateInverses and friend should be made.
19) Consider MyDefinitionalSlots -- what things are necessary to define this
unit as whatever-it-is. This includes Isa, but probably not MyIsa...
or does it? Now ask what should happen if one of these slots is deleted:
does this unit deserve to remain?
20) The various Formats and Datatypes should be further blurred together --
all are functions which take some arguments, and return a function
-- ie each is a functional! or at least a CodeAl. Think about this a bit.
21) Some considerations should be made for the current mode -- ie whether
the user is present or not. In this case, the system
might decide to go ahead and guess, rather than ask the user a
question when in doubt. Note this should ALWAYS be recorded,
on list of possible problems...
Example of SPEC
need Specs, Instanes, Genls, InstanceOf (← used to create new objects)
maybe Specs*, Genls*, ... AllSpecs? AllGenls?
Ship
Cost: (*IRange 13 20)
Specs: (BigShip Tanker)
Cost
Isa: (AnySpecializableSlot)
Role: - one of R(estricted), O(ptional), C(opy), U(nique)
- note Unique NOT needed, as these just other slots!! -
RangeType: (FSingleton IntegerType)
- note this means something different here, depending on role!!
- now can include dataranges, as well!
*IRange
SubRange: (λ (r1 r2) true if r1 is a subrange of r2)
?Verify?: (λ (...) returns function which ...)
RangeType: (FListN IntegerType IntegerType)
BigShip
Genls: (Ship)
Cost: (*IRange 15 20)
Instance: (Tanker#37 ...)
Tanker
Genls: (Ship)
Cost: (*IRange 14 17)
Instance: (Tanker#37 ...)
Tanker#37
InstanceOf: (Tanker BigShip)
Cost: 15
Possible Problems
QUOTE? are still in HEURS
BACKQUOTEFN still in EURISKO
AnyCT&U in GENLINFO
AddOnCharacter - now takes another argument [NIL if single element, T if list]
McDo is still around - this may cause trouble!
MyCreatedAs still has (VirtualSlot) and (PrimSlot) - these should be updated!
(you thought history was static!)
Quickies:
ComposeInOrderAux, and friend - should twiddle the specvar, isList, to
be the current RangeType - by using ApplyRange, based on MapUnion or MapInsert,
each new composition. This will require a bunch of twiddling...
<<Note this means MapUnion/MapInsert must be unitted>>
- RLL-WRITE should be further modified - so the value of the WhenWritingNetwork
function is used: maybe XWRITE, or COMPACT, or ... depending on its
returned value. [Note this means StandardStartUp should take a few
different parameters: C? for Compact if necesary, X? for XWRITE if necessary,
... where necessity is determined (for now) by the CompressMe? function
- [this should be in PROP, on DAVECOMS {<- should be renamed to ?COMS}]
Furthermore, things like RemoveVirtualSlots should only be done then,
perhaps. Indeed, many of the parameters should be Y/N/C?/X? - to indicate
whether it should be done automatically or not, or only when ...]
New inheritance: ISubUnit - takes a unit and slot, and makes a new unit...
Q: Can I twiddle NU and FNewFieldUnit to use these inheritances
as IExamples, ISubClass and ITypEx did?
Some LISP functions, when typed at top level, actually
call a different function -- like PUTD is executed as \PUTD, and SETQ as SAVESETQ.
LISPX\ does this. Make PutValue, and friends, use this to be undoable.
(see 22.3?)
Fix RLL-WRITE to permit the file to be copied, rather than renamed.
This should depend on result of the WritingNetwork function --
returning Compact if the function is to be copied, and nonNIL
if acceptable - NIL may be error.
FirstOf -- new type of slot combiner - like McCarthy OR - when subslots
are disjoint.
Extra undeclared variables
Get list of unDescr-ed units (from Steve, etc), which I'll describe
[3-May-81]
[Test out FnForUpdating of Composition and Starring - esp the P case.]
Change from Record{Put/Get} to JJF's package
Finish fixing up Slot Combiner's FnForUpdating s
(now on P part of Composition)
[5-Feb]
1] Fix TypicalCodeGenFunction(?)
- give it appropriate GetFNSUsed & GetCVsUsed values.
1) Finish IsParse? - used with GrammarType.
2) KRL like parser - for "a Moose with Antler = big, ..." (should be easy, using
just FNewUnit.)
Units to Rename/Add/Delete
Rather than WHY value: +ALWAYS-UPDATE, make it -USE-OLD-VALUE.
--Rename
TypicalDataType → TypicalDatatype
Exs → Examples
HowToProcess → LispFn
fix Process [Args to Process -dependent on ?]
--Delete
HighLevelToCompute (subsumed by HighLevelDefn)
--Add
AnyIsa, ExistIsa, VariesWith, ...
Fixes to UTIL, DAVE, RLL, AUX
Default for BACKUPDIR should be "", not NIL! ← or is this DAVE?
Fixes to CORLL
1) ADVISE the function which does PAGE assignment -- as UP-BUMP is now only
called when the number of free cells crosses some threshold -- and currently
it is possible for page after page to be gobbled up, without triggering
this interrupt.
[Perhaps advise should be on Garbage Collector, in general?]
↑ Steve K's looking into this.
2) Some units on UP.INCORELIST should not be -- their value cell
(returned by GETTOPVAL) is of the form
((<kbname> . <unitname>)), and not
((<kbname> . <unitname>) <sexp> . <changeflg>) -- ie it already had
been swapped out!
3) UF-SUMMARY is broken - its assumptions about names is erroneous --
this is apparent when NIL filename is passed.
4) UF-XOPEN automatically read-writes the new KB. It should be able to
open it "virtually" -- ie nothing would be preserved externally, only
in the LISP image. Also, it should allow NIL to be used for the KB name --
enforcing the "locality" of these units.
[see below]
∂ 1 Aug 1981 2207-PDT GREINER The NIL kb
To: csd.smith at SU-SCORE
cc: greiNER
Dave -
How well integrated is the NIL kb? There are times I want to
just dump into core the various units found on some Xfile; and do NOT
want to go thru the space expenditure of create a regular hash file
for this stuff.
I'd like to do a (UF-XOPEN NIL 'Fred.XKB) -- but CORLL would
squack at that. The other possibility seems an awkward
(UP-NOBUMP (temp)
(SETQ temp (UF-XOPEN 'JUNK 'Fred.XKB))
(CLOSEF temp)
(DREMOVE temp UF.NETWORKS)
(UF-OPEN temp 'INPUT))
which I'd really rather not do...
Comments?
Russ
-------
∂ 5 Aug 1981 1032-PDT <CSD.SMITH at SU-SCORE> Re: The NIL kb
To: GREINER at RAND-AI
In-Reply-To: Your message of 1-Aug-81 2207-PDT
You'd have to modify UF-XOPEN to do the special case checking to make this work.
I suggest a corresponding change to UF-XWRITE if you so desire. The more
elegant way to do things is to perform the separation between file names and
in-core knowledge base names, thus allowing an arbitrary number of scratch
knowledge bases of arbitrary names. If a KB doesn't have a read/write file
connected to it then it wouldn't be pageable. You're welcome to make these
changes. I'll provide a bit of guidance where necessary if you want to
sacrifice a couple of days.
-------
---------------
-------
Fixes to XUTIL(M)
--- To XUTIL(M) ---
Fix !EDIT so it asks if the function should be Unbroken while you probe
about it. -- maybe this should be a fix to EDITF? - tried but had trouble...
New FILEPKGTYPE: LOAD-FILE -- which means load in this file, if not
already present. Remember to fix up KBsFNS, KBsVARS correspondingly.
BTFN (and especially REEVAL) get into real trouble when the function
is mispelled -- figure out about generators and fix this!
---------
MakeFile1 needs better advice
General LISP questions
Why isn't CONN in LISPXMACROS on Rand-Ai's Lisp? ask DEA
Larry -
I've a few questions, related to InterLisp, as you might have guessed.
First: I noted that neither PUTD nor /PUTD (nor MOVD, /MOVD) call
MARKASCHANGED. Is this a feature, or a bug? You may remember I went
through the hassle of advising these functions, to help with my bookkeepping;
until you told me the FILEPKGTYPE(FNS WHENCHANGED (...)) hack would solve
these problems.
Next: Is there any way I can enter LISP which does NOT read (and execute)
the INIT.LISP file on my login directory? (Short of first renaming that file?)
I know I can then UNDO that GREET command, but I feel guilty making
LISP do all that work for nought.
[The problem which motivated this question are files which are LOADed
during this start-up. As you know, the FILE package never finds out
about these files, which makes them next to impossible to alter.
By the way, simply tacking the names of these files onto FILELST
makes the functions on these files "readonly" -- EDITF will now read
in these files, but a subsequent MAKFILE begins by (re)reading in the
file, wiping out the changes.
Indeed, the only way I know of altering these files is to first
LOAD them by hand.]
My final question is about Rand-Ai's <LISP>LISP.EXE.133 in particular.
There are a lot of bells and whistles present in SCORE's version which are
not included there -- such as the LISPXMACROS
EV, EP, EF, and CONN. Will subsequent releases of Lisp include these
niceties; or will these only be customizations?
Thanks,
Russ
Ask how to advise EDITF to ubreak the function - regualr advise doesn't work,
as I just get the message that it's being edited...
-------
Fixes to Documents
Add to DEMO:
How to start up to on a new system
Possible incompatibilities of Rand-Ai / SCORE / ISIB versions
Comments on Code
Why some infinite loops are harmless:
[13-Sep-81 1626]
Well - GetValue might have the same arguments twice, and this does NOT
lead to an infinite loop BECAUSE: that 2nd time thru might have been for
some KB update - which is "Acted on" only if the value has been changed.
Now the first time thru the value was already stored; so this second time
it's easy to retrieve the value. As the slot's ToCompute was not used, and
no new value was stored, there is no need to do any updates -- and hence
we will not need to request this u:s again (as it was only needed for
KB update purposes in the first place.)
Hence seeing two identical calls to GetValue on the stack is NOT intrinsically
bad, IF THAT CALL IS RELATED TO KB UPDATES. (Otherwise we is in truoble...)
Three identical calls is always trouble.
---
Things to do:
Put an ERRORSET within INTTY, around that TAILP function. Recall that that
function screws around with terminal I/O stuff, and so causes trouble
if ↑H-ed.
Consider making the GetValueSTK type of variables GLOBALVARS which are RESET
within each break. Hence the stack would only reflect current calls, as
desired. Also would be reset each ↑D, or each ↑ itself.
While fixing TRACER and FIND-INFINITE, use Warning equivalent rather than
ERROR - give the user a chance to say NO.
If XUTIL needs fixing anyway, change Dave's erroneous comment re: DRIBBLE.
[12 Oct]
MySensibleSlots - different for different units --
for subunits, use:
(Unioning <MSS:HLDefn> (Composition <MSS:HLDefn> MyLivesInSlot)),
where MSS:HLDefn is current HLDefn of MySensibleSlots.
[or (Composition <MSS:HLDefn> (Unioning LivesInSlot IDENTITY)) ].
Note the proper way of doing this is to have a subunit for
TypicalX:MySensibleSlot - which has a HighLevelDefn and other misc.
Let each unit decide on it appropriate slots - using U:MySlotsPred
(a function taking (U S why)). Then store ? on TypicalThing:MySlotsPred,
and something else on TypicalSubUnit.
LivesInLocation → MyLivesInLocation
LivesInSlot → MyLivesInSlot
LivesInUnit → MyLivesInUnit
The function Invalidate should really be InvalidateValue (as opposed to
field).
Got rid of Subsetting & CommonXProd -- before KillUnit-ing it, made sure its
FnForUpdating has been transfered to ApplyToEach. Check it out with
GenlsModels and MyNewPossibleSlots.
[Eventually find a better name for ApplyToEach - like MapTogether...]
The various Domain and Range type specifications should correspond to the
lisp function in that same tuple - obviously! But it doesn't!! The
DomainType specification is for the LispFn, NOT the definition, currently.
FIX IT! Have the ToCompute take just 2 arguments. (You dummy!)
<<< Working on this [4-Oct] - there is currently a check in GetValue
which examines each function, for number of args. Will leave
that in a while... >>>
FOptional now exists, and may even work.
The same for the rangespec - *DomainFn.
Be cleverer wrt removing virtual links: Perhaps only do this when you've
decided to compress a KB anyway. Note this will be a hassle when you've
that foursome of core KBs around -- first remove virtual links ON ALL, and
then compress just those which have to be compressed... (Do this ONLY IF
AT LEAST ONE has to be compressed.)
- Started this (28/Sep/81) -- but used REHASHFILE - which does NOT
- shrink the file...
DCL (and DCL?) should be able to overwrite existing declarations --
after asking the user... These guys also sometimes point to the wrong place,
when they (resp) find that someone got there first...
Changes KBUpdates -- so UpdateInverses takes a list of tuples; and so does
the overhead only once.
Note AnyClassOfObject:Isa = (AnyClassOfObjects) -- make it so!
[Currently points to Anything.]
Hmmm - note PsuedoInverses are NOT handled correctly in general:
When V is added to U:Networks, (DESTATUS U) does indeed get deposited on
(ENSTATUS V); but the other changes are NOT made. Why?
-now they are-
In calls to GetValue, changed from
SOFT => -COMPUTE
NO-CACHE => -CACHE
VERYSAFE$ => SAFE$
SAFE => ""
CONSTANTSLOT => ""
[ Left FAST-GET - this may be used eventually]
Changed values of MyCreator from
"LENAT", "CSD.LENAT" => DougLenat
"GREINER", "CSD.GREINER" => RussGreiner
Have the value of FLAGS given to BAKTRACE in BTFN at least 7.
Better, use the writing function I already wrote, which gives the actual
arg names, and in which I can set the PRINTLEVEL...
Make all KBs not currently in use a XKB file -- so I can make other
changes to these as need arises.
(Basically for the sake of *P) AllIsas should include TypicalExampleOf
and have *P key off that. (Later there'll be a *P', which does
what *P does now...)
-- Done - sort of. Now there is that MyIsa, which does the right
thing for typical examples. And AllIsas has the def'n
(Composition SuperClass* (Unioning Isa MyIsa))
2) Fix up each TypicalExample:
The Isa should point to what its a TypicalExampleOf,
and the MyIsa should refer to AnyTypicalExample (possibly with the
self awareness.)
1) Go thru all units, adding only a SelfAwareness...
Fix up RLL-OPEN to check dates, and open the XKB file if it is more current.
(Older changes done already - until 10 Sept 80)
[10 Sep]
Change adviCe to adviSe, for EDITF
(If a function is broken, rebreak it after you finish editing it!)
-- no - just stored the actual (ADVISE 'EDITF ...) to avoid hassles.
Have AP take 2 args: the second for positioning -- just hand this
to the (## ...) call
Add FindInfinite to XUTIL -- to find when a function calls itself with the
same args.
Fix SETSYNTAX stuff - make it still do the work, only ask in case not a known
host.
Fix RLL-FAULTEVAL (RLL-FAULTAPPLY) to check Unitp first - avoiding the call
to Processp in those cases. Also, in case of a single argument (eg OPK <cr>)
NewPossibleSlots → MyNewPossibleSlots
Add on an additional field to PseudoInverses - which indicates whether we
have a single value, or a set of them.
0) Figure what the 3rd argument to GetValue really mean! Esp IGNORE-VALUE,
From, Calculating, ... (maybe some of these should hold the value,
to make the computation faster for ComputeWhenFilled)
Fixes done!
[5 Aug]
Add a new PROP-PRINT - to use as extra arg to UF-SUMMARY, which prints
out units in nice plist format.
Should be like UA-PRINT. Figure out how to twiddle SHOWPRINT.
- Use the function PRINDEF - which allows me to give the left margin.
[2 Aug]
Fix up RLL-OPEN to check dates, and open the XKB file if it is more current.
Have the value of FLAGS given to BAKTRACE in BTFN at least 7.
Better, use the writing function I already wrote, which gives the actual
arg names, and in which I can set the PRINTLEVEL...
Make all KBs not currently in use a XKB file -- so I can make other
changes to these as need arises.
<<<SCORE is now fixed up as well!!!>>>
I put on a MyIsa on all Rand-Ai units - pointing to (AnySelfAwareUnit).
[Note TypicalSelfAwareUnit:NewPossibleSlots includes those syntactic slots.]
This was NOT done for the SCORE KBs.
Note that henceforth TypicalMumble:Isa include (AnyMumber); it is
TypicalMumber:MyIsa which refers to AnyTypicalExample.
Again, this fix made at Rand-Ai, BUT NOT AT SCORE.
[1 Aug]
(Basically for the sake of *P) AllIsas should include TypicalExampleOf
and have *P key off that. (Later there'll be a *P', which does
what *P does now...)
-- Done - sort of. Now there is that MyIsa, which does the right
thing for typical examples. And AllIsas has the def'n
(Composition SuperClass* (Unioning Isa MyIsa))
2) Fix up each TypicalExample:
The Isa should point to what its a TypicalExampleOf,
and the MyIsa should refer to AnyTypicalExample (possibly with the
self awareness.)
1) Go thru all units, adding only a SelfAwareness...
Fix CORLL - UF-CANCEL needs a CONCAT
Add on AnyItem - where AnyRationale had been
Fix DCL macro - in case there are no args, to just put (DECLARE)
Add on features to BTFN:
(from <FN-NAME>), (to <FN-NAME>), (between <FN1> <FN2>)...
Let REEVAL macro do some error-correcting (ie if NOT a function, or not
on stack, then walk thru stack, trying for a match... stopping
at first one user OKs. Note can put "$"s and friends here as well...)
IUseToComputeOf → IUseDefnOf
ToComputeUsedBy → DefnUsedBy
SameHLToCompute → SameHLDefn
AnyArchetype → AnyTypicalExample
Create a new APV for Format, which checks to see if the value is changed,
on a cached function. If so, consider waddling about the KBs,
fixing formats.
[23 Jun 81]
Figure a good ratio for file size to #units - and squish to file if this
is exceeded.
6) Change function in TypicalInheritableSlot:AfterPutValue -
If the unit, U, is a typical one, then do the necessary work to find each
yεU:TypicalExamplesOf such that y:S is now different.
Then go thru and invalidate each of these.
(Maybe first see if the invalidation is trivial,
and only do this work if necessary.)
This will be particularly necessary to ToXValue, for the macro task.
1) Fix the advice to various functions, to be something like
ADVISE foo 'AROUND '(RESETVARS ((IgnoreFnInPUTD (CONS x IgnoreFnInPUTD))) *]
2) Make UpdateInverse just a special case of general KB updates --
and expand that operation -- eg to go from <kb> to <kb>.STATUS,
or ...
KBupdates is also a UnitProcess -- make it so!
For EuriskoProcesses, DomainType can be deduced from WhatToProcess.
[5 Apr 81]
0] UpdateInverse doesn't seem to be working - at least when new units are added.
4) Change from OneOf to putting (*Do* FExectute (λ ...)) on the typical examples -
do it for LispFn.
Question: Can I eliminate other definitions as well, using such tricks.
Fixed
[1 Apr]
<Dave: could we have several logically distinct KBs on one file?
< ans: no, but can be simulated...
10) The way of handling functions [Processes] is NOT totally consistent.
Should have arglists,... Also some notion of how to check for what.
New apply - should be: if ∃ n args, if n=1, then slot, n=2 => field,
else just apply defn of first arg...
Change from HowToProcess to LispFn
Fix Processes, so its args can vary
ie, use DomainType for each, with RangeType = "WhoCares"
Description of KBs, at top level [logically distinct]
RLL - only the list of "stops", with essential ones extended.
USERS - list of users, and of classes of users - this KB always loaded in as well.
SLOTS - holds all the slots
LISPFNS - holds the various LISP functions used; needed to reason about ...
Not included, at least not yet:
GENLINFO - misc very high level things, which point to most of rest (basically this
is set of units for classes.)
3) New functions, which use FocusStatus:
DeactivateTask [Inactive]
SuspendTask [Suspended]
ActivateTask [Queued]
ProcessTask [Running] {formally ProcessTaskInstance}
[13 Mar]
5)
a] Give each KB a SubKBs slot, which holds the names of logically seperate
but essential KBs.
b] Twiddling the StandardXUp (XεStart, Finish) functions -- in particular,
change the order of args for them, to do RECOMPILing FIRST! (while units around.)
Fix up WhenXingOptions on TypicalUser (and all examples.)
c] Store stuff in SLOTS and USERS. (once they are subKBs.)
[12 Mar]
Also figure how to use values. [Eg does L-AND work here, or not? - Yes]
Get rid of Agenda, fix Spill,
4) Revert back from AnyRuleSpecFn to slot. Change Conjoining to ListOfParts
(that is, executable parts). Fix IfParts, ThenParts to use this, NOT MySlots.
Units for Known, Unknown, LeaveForLater (in HEURS) - these used in Rules
{Winding thru Spill Rules (R-Backtrack)}
9. Make sure each slot has a MakesSenseFor
- and improve final function to confirm that for each...
13. Class of temporary units - eg instances of AnyFocusInstance - to be deleted
(along with virtual slots) when KB is closed.
---------
[5 Feb]
?????
0. BIG CHANGE: The UNIT should know about the accessing, not the slot! Hence,
associate with each KB (or unit?) the name of the accessing types -
so change GetValue to RLLGetValue, and stick (Get . RLLGetValue) on each
of current KBs (similiarly with Put, Add, ...)
Note: to emulate Units, just put UA-GETVALUE there...
In this way, we can solve Genesereth's & R H-R's complaints, ...
and allow various schemes
for indexing.
?????
- Status: This sorta goes away... -
TypicalVirtualSlot → TypicalComputableSlot
TypicalPrimSlot → TypicalPrimitiveSlot
ToInitialize → ToInitializeValue ← InitializeSlot
ToCache → ToCacheValue ← CacheValue
Delete AnyCT&U, AnyAT&U, TypicalCT&U, TypicalAT&U - they are unnecessary!
(as really just dealing with composition).
2) Finish up various facts about SlotCombiners.
Esp. FnFor?ing, which replaces UsingSlotCombiners, ...
- Status: this should be done now ... still unchecked -
3) New KB - LISPFN - this will house my description of various things which are
now lisp functions, especially
GetValue, ...
MapUnit, ... [note this MAY require fixing I/OTypes - as union of ...]
DefaultGetValue, ...
- Status: Still may need I/OTypes, but pushed this. -
6) Fix up OrderedPrototypes to be more efficient - so renames slot from Prototypes
to OrderedPrototpes, and note that defn of Prototypes can use that: in its defn.
Or just make Prototypes never-cached! (as OrderedPrototypes had been.)
- Status: Done as described -
7) Figure out what to pass along to DefaultAfterPutValue - perhaps it should
be a history list, or the form ( ... (Slot1 Unit1 Add) (Slot0 Unit0 NewVal) ... ).
Maybe not. Newer things toward the front. This should subsume the hassle
now done for FunctionSpec.
Should this only be done for circular things? That is, cases like RangeType?
(so flag, associated with each slot, set to do these things.)
- Status: Ad hoc things passed (and checked for), as necessary -
[17 Dec]
add on RangeInterpreter for UnrestrictedType
10) Find why specifying RangeType (when Format was NIL) erased both.
Some loop there.
11) Make AnyDatatype ⊂ AnyUnaryPredicate, and change slot names appropriately
Is Format ⊂ AnyCodeAl? No - but it is similar....
12) Use LASTPOS for REEVAL's starting position, rather than NIL.
13) Make sure each format's FnForXXXing returns its last argument (which is
now the modif) if successful. Hence forth that will be used!
(When verified that this works, change each DefaultXXXValue function, removing
the check.
14) Decide if ADDTOVAR works, or if this gets stuck on MARKEDASCHANGED...
15) On BQ* macro, fix so only (PROG ((g0012 (CAR sss)) ...) (RETURN (...)), rather
than use those SETQs
10. Use result of DefaultBeforePutValue - and make sure the verifiers return
such [this is modify...]
Things done
16. Need a WhenFilled (Defn like IfNeeded)
[perhaps a ComputeWhenFilled, listing slots to be fixed up]
- this pushes some values along
when a new value has been enterred...
[This can do (1) recomputing Essential slots, and (2) determining value
of slot X when slot Y has been changed.]
Use this to rid self of FunctionSpec monstronsity, by always pushing values into
slots, in all three cases. [Use CacheValue for one not explicitly requested,
with why value explaining this.]
Another solution:
FunctionSpec, when called, automatically caches Defn, DomainType and
RangeType. So these slots don't both caching -- ie ∃ new slot,
ToCacheValueFromElsewhere, which FunctionSpec calls.
Note Defn:ToCacheValue is AlreadyCached (which ≡ NoOp)
(Should the slot-combiner know about this? How?
? (DoAlready (ApplyingFn CAR HighLevelDefn)) ?
[29 Nov]
Each of these - *P, OneOfThese, Predicate, ... should be units.
3) Use BACKQUOTE to advantage, to make more readible code
Rename from HLDefnParser to HLDefnExpander (and for Type)
- fix FunctionSpec & VerifyArgs/VerifyValue
Defn of FunctionSpec - GetAccessFn => GetValue for last chance
(worry of infinite loops...)
[21 Nov]
Fast flag to UU-DIAGNOSE
QUOTE?# => QUOTE? => BACKQUOTE
UF-CANCELNETWORK takes a list
UF-OPENNETWORK & UF-CLOSENETWORK -- 2nd arg is fn to be executed
[NIL defaults to earlier; T does nothing]
-- 3rd arg : T means ReadOnly
-- rewrite own UP-OPENNETWORK -
Twiddle AFTERSYSOUTFORMS, BEFORESYSOUTFORMS
Finally thought of them:
Arg to pass to OverallStartUp, and WhenClosing - so not just name,
put 2nd value, which that function can use.
(This ?th argument to UF-OPENNETWORK/UF-WRITENETWORK)
[14 Sept]
1b) RELATED: ToInvalidate - associated with each slot, indicated what to do
when this value is no longer relevant.
14. IgnoreCached - if given to GetValue, does not do UA-GETVALUE, just uses Defn
to recompute it. Note: old value should be passed to CacheValue - this
had always been NIL before.
[9 Sept 1980]
PrimSlot → AnyPrimSlot ← RemoveVirtualSlots
VirtualSlot → AnyComputableSlot ← RemoveVirtualSlots
$SELF$Slot → Any$SELF$Slot
Examples → UnitExamples
13. Make unit initialization faster
- cache slots, ... on inheritance.
0) Now (4 July) doing:
AnyUser - see #5
0.5) ReadOnly Mode -- set UP.BUMP? to NIL
LOGOUT's advise - to see if any put units since last SYSOUT, or
OpenNetwork (if UF.NETWORKS non-NIL)
[When logging out, ask user -- even if ReadOnly...?]
Store who has used this core image.
2) UnionDT, and IntersectDT - need to deal with cases when types are
different (eg FunctionType & SlotType [transform SlotType into
(FunctionType (?DomainType? UnitType...))
5) AnyUser, in RLL. - here we store which KBs this user will want. In START,
single question: "Your usual?". If Y, these loaded in.
Else gets list, with questions. (May decide these are to be his default, or
not.) Also, his "profile" indicates answers to the questions.
Store with each KB whether or not it was Disconnected (and from whom.)
If not, why even ask to reconnect?
When he creates a new KB, this added to his list.
[4 July 1980]
ActionPartOfRule → AnyActionPartOfRule
IfPartOfRule → AnyIfPartOfRule
ThenPartOfRule → AnyThenPartOfRule
1. Fix EDITU so second arg given to PutValue -- so may verify or not...
2. (QUOTE?# '(LAMBDA (*1) (PROG ?1 *2))
'((G0035))
'((unit slot)
((* this list is bound to *2) (UA-MAPSLOTS unit 'WRITELNTTY))))
returns
(LAMBDA (unit slot)
(PROG (G0035)
(* this list is bound to *2)
(UA-MAPSLOTS unit 'WRITELNTTY)))
That is, QUOTE?1 takes three arguments:
#1: a list, in which substitutions will be made,
#2: a list, whose i-th element is the value for ?i [here ?1 is (G0035)]
#3: a list, whose i-th element is the value for *i [here *1 is (unit slot)]
[8 May 1980]
1. Ramifications of Altering a slot's value -- eg
(i) IF x.S* is changed, THEN ∀ y ε x.(S-1)*, y.S* is invalid
[IF S = T ∪ V, & something is added to x.T
THEN x.S should have that value aded as well - if format is ...]
(ii) IF OrderedX is built from X by some ordering - ie is redundant-but
ordered of X - then when U.X is modified by Adding, or Renaming,
X should be removed from U.SlotsNowOrdered.
5. DomainType, RangeType
ValuesInvalidated - defined from HighLevel, as should Format, Datatypes
1) Make sure VerifyAll is doing the correct thing. Also pass unit and slot name
to it. (Fix it up for rest of ValueFormats.)
Delete now worthless FnForVerifyingAll and -- List.
* 2) MyKB is AnyUnitFunction - make it so.
5) Args to HLDefnParser should be (name (RangeType) ...)
(note: delete HLVerify - now RangeType.)
Define DomainTpe, RangeType
[Note: need only FnForAdding - 1, List, 1st - come from why part.
Units renamed.
FnForRenaming1 → FnForSubstituting1
ToRenameValue → ToSubstValue ← ↓
[DefaultRenameValue → DefaultSubstValue - this a function]
SubSetDT → SubDT
SuperSetDT → SuperDT
SlotsNowOrdered → MySlotsNowOrdered
EssentialVirtualSlots → MyEssentialVirtualSlots
DependantNetworks → DependentNetworks ← GetKBs
ISpecs → ISubClass
PossibleSlotsOfISpecs → PossibleSlotsOfISubClass
ActionType → FunctionType
Fix HLDefn.Defn (or ToInit..) - SortSlots => PutInOrder
CreateSlot - descends from VirtualSlot, not AnySlot
Fn for computing ToParseParts-like thing, so TPP can be eliminated
Format & Datatype - should descend from RangeType, softly (not FunctionSpec)
Names selected - need loops
λ(x) (McDo .. (NOT (Unitp (RPLACA (SETQ ...(EXPLODE (GETSYM))
[in CreateU4S,CreateSlot. ...]
Ask user if he wishes to create a new slot -
[do we want to merge all things invalidated into one?
[ No! Later we might want to do other things, than just invalidate]
If not, just pass HLDefnParser( highleveldefn ) along - use GetGetVal,
and the like...
- so either PSUEDO-slot or REAL-slot
If the "why" to the Invalidate function included "DoInverses", pass this along to
AfterPutValue, so it will actually remove this and that!